﻿namespace StationDataHub.Common;

/// <summary>
/// 平台通用请求构造工具
/// </summary>
public static class ChargePlatformHelper
{
    /// <summary>
    /// 构建充电站平台标准请求体（包含 AES 加密、签名、时间戳、序列号）
    /// </summary>
    public static object BuildEncryptedRequest(this object data)
    {
        var cfg = AppSettings.ChargePlatform.SecurityConfig;
        // 原始数据序列化
        string jsonData = data == null ? string.Empty : JsonSerializer.Serialize(data);
        // 判断序列化结果是否为空对象 {}
        if (string.IsNullOrWhiteSpace(jsonData) || jsonData == "{}")
        {
            jsonData = string.Empty;
        }
        // AES 加密
        string encryptedData = jsonData.EncryptAES(cfg.AesEncryptionKey, cfg.AesInitialVector);
        // 时间戳 + 序列号
        string reqTime = DateTime.Now.ToString("yyyyMMddHHmmss");
        string seq = SequenceGenerator.NextSeq();
        // 生成签名
        string sign = (cfg.OperatorID + encryptedData + reqTime + seq).GetHmacMd5(cfg.DataSecret);
        // 构造标准请求体
        var reqBody = new
        {
            cfg.OperatorID,
            Data = encryptedData,
            TimeStamp = reqTime,
            Seq = seq,
            Sig = sign
        };
        return reqBody;
    }
}
